package com.qianfeng.zhangwei.volley.utils;

import android.graphics.Bitmap;
import android.os.Build;
import android.support.v4.util.LruCache;

import com.android.volley.toolbox.ImageLoader;
import com.qianfeng.zhangwei.volley.BaseApp;

import java.io.IOException;

/**
 * @说 明：
 * @项目名称：Sz1504Adv
 * @包 名： com.qianfeng.zhangwei.volley
 * @类 名： AppImageCache
 * @创 建人： zhangwei
 * @创建时间：2015-08-03 10:48
 * @版 本：v1.0
 * @修 改人：
 * @修改时间：
 * @修改备注：
 */
public class AppImageCache implements ImageLoader.ImageCache {
    private static AppImageCache appImageCache;
    private static LruCache<String, Bitmap> lruCache;
    private FileUtils utils;


    static {
        //获取系统分配的app的最大使用内存
        int maxMemory = (int) Runtime.getRuntime().maxMemory();
        int maxSize = maxMemory / 8;
        lruCache = new LruCache<String, Bitmap>(maxSize) {
            /**
             * 默认是item的个数
             *
             * @param key
             * @param value linkedHashmap()
             * @return
             */
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return getBitmapSize(value);
            }
        };
    }


    private AppImageCache() {
        utils = new FileUtils(BaseApp.getInstance());
    }


    public static AppImageCache getAppImageCache() {

        if (appImageCache == null) {

            appImageCache = new AppImageCache();
        }
        return appImageCache;
    }

    @Override
    public Bitmap getBitmap(String url) {
        Bitmap bitmap = lruCache.get(url);
        if (bitmap == null) {
            bitmap = utils.getBitmap(url);
        }
        return bitmap;
    }

    /**
     * @param url
     * @param bitmap
     */
    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        String fileName = url.substring(url.lastIndexOf("/") + 1);
        if (!utils.isFileExists(fileName)) {
            try {
                lruCache.put(url, bitmap);
                utils.savaBitmap(url, bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

    private static int getBitmapSize(Bitmap bitmap) {
        int bitmapSize;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR1) {
            bitmapSize = bitmap.getByteCount();
        } else {
            bitmapSize = bitmap.getRowBytes() * bitmap.getHeight();
        }
        return bitmapSize;
    }


}
